package com.toannv.handler;

import java.util.Arrays;
import java.util.List;

import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
import com.smartfoxserver.v2.extensions.BaseClientRequestHandler;
import com.smartfoxserver.v2.game.SFSGame;
import com.toannv.card.card;
import com.toannv.definitions.KeyObjectId;
import com.toannv.definitions.RequestId;
import com.toannv.definitions.ResponseId;
import com.toannv.extension.RoomExtension;
import com.toannv.helper.Roomhelper;

public class batDauHandler extends BaseClientRequestHandler{

	@Override
	public void handleClientRequest(User sender, ISFSObject paras) {
		// TODO Auto-generated method stub
		//nếu người gửi yêu cầu là chủ bàn
		if(sender.getPlayerId()==0){
			//lấy tham số gửi kèm với khóa là RequestId.ID_OF_WINNER
			int idOfWinner = paras.getInt(RequestId.ID_OF_WINNER);
			
			SFSGame currentRoom = (SFSGame) Roomhelper.getCurrentRoom(this);
			//Lấy danh sách người chơi trong phòng
			List<User> Users = currentRoom.getPlayersList();
			
			RoomExtension.NumberOfPlayers = Users.size();
			// thực hiện việc chia bài với tất cả người chơi trong room
			ChiaBai(idOfWinner, Users, currentRoom);
			
			//tạo đối tượng DanhBaimessage để gửi cho client thông điệp yêu cầu đánh bài đối với người chơi có id là idOfWinner 
			SFSObject DanhBaiMessage = new SFSObject();
			DanhBaiMessage.putInt(KeyObjectId.DANH_BAI_ID, idOfWinner);
			//Gửi thông điệp yêu cầu đánh bài với tất cả người chơi có khóa là RequestId.DANH_BAI
			send(RequestId.DANH_BAI, DanhBaiMessage, Users);
			
			RoomExtension.idOfStartGame = idOfWinner;//lưu lại id của người bắt đầu vòng đánh
			
			//Gán giá trị cho biến RoomExtension.UserRunning là idOfWinner 
			RoomExtension.UserRunning = idOfWinner;
		}
	}
	
	// Từ bộ bài 52 quân bài random, chia cho mỗi người chơi 9 quân bài, riêng người có id trong phòng chơi đc gửi lên server sẽ được 10 quân.
	private void ChiaBai(int idOfWinner, List<User> Users, SFSGame currentRoom){
		//Khai báo mảng lưu trữ các quân bài của Users.size() người chơi
		RoomExtension.CardOfUser = new card[Users.size()][];
		
		//duyệt qua tất cả danh sách người chơi
		for(User user: Users){
			int NumberOfCard;
			//nếu người chơi có id là idOfWinner thì sẽ được 10 quân bài
			if(user.getId()==idOfWinner){
				NumberOfCard = 10;
			}
			//nếu không sẽ có 9 quân bài
			else{
				NumberOfCard = 9;
			}
			//Tạo đối tượng SFS Object
			SFSObject sfsO = new SFSObject();
			//Tạo đối tườn mảng các quân bài có NumberOfCard phần tử
			card[] userCard = new card[NumberOfCard];
			
			//khai báo mảng các quân bài dành cho mỗi người chơi là 10
			RoomExtension.CardOfUser[user.getPlayerId()] = new card[10];
			
			for(int i=0; i<NumberOfCard;i++){
				card Card = RoomExtension.card.pop();
				sfsO.putIntArray(KeyObjectId.CARD_ID+i, Arrays.asList(Card.getNumber(), Card.getPoker()));
				userCard[i] = Card;
				//gán phần tử thứ i của mảng quân bài của người chơi vs Card
				RoomExtension.CardOfUser[user.getPlayerId()][i] = new card(Card);
				
			}
			//gửi mảng các quân bài cho người chơi với từ khóa là ResponseId.CHIA_BAI 
			send(ResponseId.CHIA_BAI, sfsO, user);
		}
	}
}
